﻿namespace MicroCloud.Identity
{
    /// <summary>
    /// 业务实现：身份认证模块
    /// </summary>
    public partial class IdentityService
    {
        #region "属性"
        #region "获取 第三方登录用户信息查询数据集"
        /// <summary>
        /// 获取 第三方登录用户信息查询数据集
        /// </summary>
        public IQueryable<UserLogin> UserLogins
        {
            get { return UserLoginRepository.QueryAsNoTracking(); }
        }
        #endregion

        #endregion

        #region "方法"
        #region "删除的第三方登录绑定"
        /// <summary>
        /// 删除的第三方登录绑定
        /// </summary>
        /// <param name="ids">第三方用户登录主键</param>
        /// <returns>业务操作结果</returns>
        public Task<OperationResult> DeleteUserLogins(params long[] ids)
        {
            return UserLoginRepository.DeleteAsync(ids,
                entity =>
                {
                    long userId = CurrentUser.Identity.GetUserId<long>();
                    if (entity.UserId != userId)
                    {
                        throw new Exception(I18N.T("要解除的第三方登录绑定不属于当前用户"));
                    }

                    var user = UserManager.Users.Where(m => m.Id == userId).Select(m => new { m.PasswordHash, m.NormalizeEmail }).First();
                    if ((string.IsNullOrEmpty(user.PasswordHash) || string.IsNullOrEmpty(user.NormalizeEmail)) && UserLoginRepository.QueryAsNoTracking(m => m.UserId == entity.UserId).Count() == 1)
                    {
                        throw new Exception(I18N.T("当前用户未设置登录密码，并且要解除的第三方登录是唯一登录方式，无法解除。"));
                    }
                    return Task.FromResult(0);
                });
        }
        #endregion

        #endregion

    }
}
